package com.ksd.web.controller.system;

import com.ksd.common.core.domain.AjaxResult;
import com.ksd.common.excel.ExcelFileFinder;
import com.ksd.system.service.ISysOperLogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ksd.common.config.PlayControlConfig;
import com.ksd.common.utils.StringUtils;

import java.io.File;
import java.util.LinkedHashSet;

/**
 * 首页
 *
 * @author ruoyi
 */
@RestController
public class SysIndexController
{
    /** 系统基础配置 */
    @Autowired
    private PlayControlConfig ruoyiConfig;

    @Autowired
    private ISysOperLogService sysOperLogService;

    private static final Logger logger = LoggerFactory.getLogger(SysIndexController.class);

    /**
     * 访问首页，提示语
     */
    @RequestMapping("/")
    public String index()
    {
        return StringUtils.format("欢迎使用{}后台管理框架，当前版本：v{}，请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
    }

    @GetMapping("/checkUsbExist")
    public AjaxResult checkUsbExist(){

        String result = OSChecker();
        System.out.println("判断系统result: "+result);
        if (result.equals("Windows")){
            //默认windows都弹框导入文件
            return AjaxResult.success("当前运行环境是Windows系统,模拟检测出存在USB插入",true);
        }else if (result.equals("Linux")) {
            //执行服务器上的脚本文件,获取脚本结果
            String usbFilePath = PlayControlConfig.getUsbDiskPath();
            File file = new File(usbFilePath);
            if (!file.exists() || !file.isDirectory()) {
                logger.info("未检测出有U盘挂载,该指定文件路径不存在:"+file.getAbsolutePath());
                return AjaxResult.success("未检测出服务器上有挂载U盘",false);
            }
//            int length = file.listFiles().length;
//            if (length != 0){
//                logger.info("已检测出有U盘挂载,文件挂载路径:"+file.getAbsolutePath());
//                logger.info("该目录下存在的文件个数:"+length);
//                //存在,判断系统首页是否有弹框显示,如果没有首页需弹框显示,
//                return AjaxResult.success("已检测出存在USB插入",true);
//            } else {
//                logger.info("未检测出有U盘挂载");
//                return AjaxResult.success("挂载的U盘下未检测到可用文件",false);
//            }

            //判断U盘下是否有符合条件的Excel文件,有就弹框,没有就不弹框
            LinkedHashSet<String> movieExcelFiles = ExcelFileFinder.findMovieExcelFiles(usbFilePath);
            LinkedHashSet<String> musicExcelFiles = ExcelFileFinder.findMusicExcelFiles(usbFilePath);
            logger.info("检测出有U盘挂载,U盘里有待导出电影Excel文件个数:"+movieExcelFiles.size()+"========待导出歌曲Excel文件个数:"+musicExcelFiles.size());
            if (musicExcelFiles.size() > 0 || movieExcelFiles.size() > 0) {
                logger.info("已检测出有U盘挂载,文件挂载路径:"+file.getAbsolutePath());
                //存在,判断系统首页是否有弹框显示,如果没有首页需弹框显示,
                return AjaxResult.success("已检测出存在USB插入",true);
            }else{
                logger.info("挂载的U盘下未检测到可用文件");
                return AjaxResult.success("挂载的U盘下未检测到可用文件",false);
            }
        }else if (result.equals("Unknown")){
            logger.error("未检测出系统运行环境");
            return AjaxResult.success("未检测出系统的运行环境",false);
        }else{
            return AjaxResult.success("result:"+result,false);
        }
    }

    @GetMapping("/checkHardDiskExist")
    public AjaxResult checkHardDiskExist(){

        String result = OSChecker();
        System.out.println("判断系统result: "+result);
        if (result.equals("Windows")){
            //默认windows都弹框导入文件
            return AjaxResult.success("当前运行环境是Windows系统,模拟检测出存在资源盘插入",true);
        }else if (result.equals("Linux")) {
            //执行服务器上的脚本文件,获取脚本结果
            String usbFilePath = PlayControlConfig.getHardDiskFilePath();
            File file = new File(usbFilePath);
            if (!file.exists() || !file.isDirectory()) {
                logger.info("未检测出有资源盘挂载,该指定文件路径不存在:"+file.getAbsolutePath());
                return AjaxResult.success("未检测出服务器上有挂载资源盘",false);
            }
            //判断U盘下是否有符合条件的Excel文件,有就弹框,没有就不弹框
            LinkedHashSet<String> movieExcelFiles = ExcelFileFinder.findMovieExcelFiles(usbFilePath);
            LinkedHashSet<String> musicExcelFiles = ExcelFileFinder.findMusicExcelFiles(usbFilePath);
            logger.info("检测出有资源盘挂载,资源盘里有待导出电影Excel文件个数:"+movieExcelFiles.size()+"========待导出歌曲Excel文件个数:"+musicExcelFiles.size());
            if (musicExcelFiles.size() > 0 || movieExcelFiles.size() > 0) {
                logger.info("已检测出有资源盘挂载,文件挂载路径:"+file.getAbsolutePath());
                //存在,判断系统首页是否有弹框显示,如果没有首页需弹框显示,
                return AjaxResult.success("已检测出存在资源盘插入",true);
            }else{
                logger.info("挂载的资源盘下未检测到可用文件");
                return AjaxResult.success("挂载的资源盘下未检测到可用文件",false);
            }
        }else if (result.equals("Unknown")){
            logger.error("未检测出系统运行环境");
            return AjaxResult.success("未检测出系统的运行环境",false);
        }else{
            return AjaxResult.success("result:"+result,false);
        }
    }


    public static String OSChecker(){
        String os = System.getProperty("os.name").toLowerCase();
        System.out.println(os);
        if (os.contains("win")) {
            System.out.println("This is a Windows environment.");
            return "Windows";
        } else if (os.contains("nix") || os.contains("nux") || os.contains("mac")) {
            System.out.println("This is a Linux or Unix or Mac environment.");
            return "Linux";
        } else {
            System.out.println("Unknown operating system.");
            return "Unknown";
        }
    }

}
